package com.tn.openrpc.util
{
	import flash.utils.ByteArray;
	import mx.utils.Base64Decoder;
	import mx.utils.Base64Encoder;

	public class Base64Util
	{

		/*============================================================================*/
		/* Private Static Properties                                                  */
		/*============================================================================*/

		private static var _decoder:Base64Decoder;

		private static function get decoder():Base64Decoder
		{
			return _decoder ||= new Base64Decoder();
		}

		private static var _encoder:Base64Encoder;

		private static function get encoder():Base64Encoder
		{
			return _encoder ||= new Base64Encoder();
		}


		/*============================================================================*/
		/* Public Static Functions                                                    */
		/*============================================================================*/

		/**
		 *
		 * Decode BASE 64 String to Serialized Object
		 *
		 * @param body
		 * @return
		 *
		 */
		public static function decodeBody(body:String):Object
		{
			decoder.decode(body);
			const bytes:ByteArray = decoder.toByteArray();

			return bytes.length
				? bytes.readObject()
				: null;
		}

		public static function encodeBody(body:Object):String
		{
			var byteArray:ByteArray = new ByteArray();
			byteArray.writeObject(body);

			encoder.encodeBytes(byteArray);

			return encoder.toString();
		}
	}
}
